package com.hhz.stream.part1;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.stream.Stream;

/**
 * 将集合/数组数据以流的方式操作 对数据进行加工 产生新的流数据  不会对原始数据做出更改
 * 集合讲的是数据，流讲的是计算
 * 注意：
 * 1 Stream自己不会存储元素
 * 2 Stream不会改变源对象
 * 3 Stream 操作是延迟执行的。意味着他们会等到需要结果的时候才执行
 * <p>
 * 流操作过程
 * 1.创建Stream
 * 2.中间操作
 * 3.终止操作
 *
 * @Author Rem
 * @Date 2020-02-12
 */

public class TestStream {
    //1.创建Stream
    @Test
    public void test1() {
        //1.可以通过Collection 系列集合提供的stream()或parallelStream()
        List<String> list = new ArrayList<>();
        Stream<String> stream = list.stream();

        //2.通过Arrays 中的静态方法stream() 获取数组流
        Integer[] ints = new Integer[]{1, 2, 3};
        Stream<Integer> stream2 = Arrays.stream(ints);

        //3.通过Stream 类的静态方法 of()
        Stream<Double> stream3 = Stream.of(13.3, 2.12, 4.2);

        //4.创建无限流
        //迭代
        Stream<Integer> iterate = Stream.iterate(0, a -> a + 2);
        iterate.limit(10).forEach(System.out::println);

        //生成
        Stream<Double> generate = Stream.generate(() -> new Random().nextDouble());
        generate.limit(10).forEach(System.out::println);

    }
}
